package com.cares.fw.database.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 调用查询SQL的DAO接口 
 */
public interface QueryDAO {

	/** NON-PARAM*/
	public static final HashMap<String, String> EMPTY_PARAMS = new HashMap<String, String>();
	
	/**
	 * 执行SQL,返回单条指定类型的对象
	 * @param sqlID SQL-ID
	 * @param bindParams SQL参数
	 * @param clazz 返回类型
	 * @return SQL执行结果
	 */
    @SuppressWarnings("rawtypes")
	public <E> E executeForObject(String sqlID, Object bindParams, Class clazz);

    /**
     * 执行SQL,返回单条<code>Map</code>类型SQL执行结果
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @return SQL执行结果
     */
    public Map<String, Object> executeForMap(String sqlID, Object bindParams);

    /**
     * 执行SQL,返回多条指定类型的对象数组
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @param clazz 返回类型
     * @return SQL执行结果
     */
    @SuppressWarnings("rawtypes")
	public <E> E[] executeForObjectArray(String sqlID,
            Object bindParams, Class clazz);

    /**
     * 执行SQL,返回多条<code>Map</code>类型的对象数组
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @return SQL执行结果
     */
    public Map<String, Object>[] executeForMapArray(String sqlID,
            Object bindParams);

    /**
     * 执行SQL,返回多条指定类型的对象数组
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @param clazz 返回类型
     * @param beginIndex 开始索引
     * @param maxCount 最大件数
     * @return SQL执行结果
     */
    @SuppressWarnings("rawtypes")
	public <E> E[] executeForObjectArray(String sqlID,
            Object bindParams, Class clazz, int beginIndex, int maxCount);

    /**
     * 执行SQL,返回多条<code>Map</code>类型的对象数组
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @param beginIndex 开始索引
     * @param maxCount 最大件数
     * @return SQL执行结果
     */
    public Map<String, Object>[] executeForMapArray(String sqlID,
            Object bindParams, int beginIndex, int maxCount);

    /**
     * 执行SQL,返回多条指定类型的对象List
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @return SQL执行结果
     */
    public <E> List<E> executeForObjectList(String sqlID,
            Object bindParams);

    /**
     * 执行SQL,返回多条<code>Map</code>类型的对象List
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @return SQL执行结果
     */
    public List<Map<String, Object>> executeForMapList(String sqlID,
            Object bindParams);

    /**
     * 执行SQL,返回多条指定类型的对象List
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @param beginIndex 开始索引
     * @param maxCount 最大件数
     * @return SQL执行结果
     */
    public <E> List<E> executeForObjectList(String sqlID,
            Object bindParams, int beginIndex, int maxCount);

    /**
     * 执行SQL,返回多条<code>Map</code>类型的对象List
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @param beginIndex 开始索引
     * @param maxCount 最大件数
     * @return SQL执行结果
     */
    public List<Map<String, Object>> executeForMapList(String sqlID,
            Object bindParams, int beginIndex, int maxCount);
}
